package com.mes.task.manager.iface;

import java.util.Date;
import java.util.List;

import com.mes.basicdata.domain.Operation;
import com.mes.common.manager.iface.IBasicManager;
import com.mes.task.domain.OperationTask;
import com.mes.task.domain.PartTask;
import com.mes.task.domain.WorkRecord;

public interface IOperationTaskManager extends IBasicManager<OperationTask> {

	// public static final int ALL = 0;
	// public static final int FINISHED = 1;
	// public static final int UNFINISHED = 2;
	//

	public void feedbackTask(List<WorkRecord> workRecList) throws Exception;

	public void feedbackTaskWorkRec(WorkRecord workRec) throws Exception;

	public void forceFinishTask(String taskUID, String employeeid) throws Exception;

	/**
	 * 设置某一道工序任务完成
	 * 
	 * @param operationTask
	 * @throws Exception
	 */
	public void finishOperationTask(OperationTask operationTask) throws Exception;

	/**
	 * 设置某一道工序任务完成
	 * 
	 * @param taskUid
	 * @throws Exception
	 */
	public void finishOperationTask(String taskUid) throws Exception;

	/**
	 * 是否生产责任部门，主要用于判断该登录人员是否有权限进行任务相关的操作
	 * 
	 * @param sessionDeptUid
	 *            登录人所在部门
	 * @param taskDeptUid
	 *            任务的主制车间
	 * @return
	 */
	public boolean isProductDutyDept(String sessionDeptUid, String taskMasterShopUid);

	/**
	 * 刷新一个零件任务的工序距离，从排序号afterOperationId之后开始，不包含该排序号afterOperationId工序
	 *
	 * @param partTaskUid
	 * @param afterOperationId
	 *            afterOperationId为null时，默认为该零件的所有工序
	 * @param beginTaskDistance
	 *            beginTaskDistance为null时，初始工序距离为0
	 */
	public void refreshTaskDistance(String partTaskUid, Float afterOperationId, Integer beginTaskDistance);

	/**
	 * 锁定一个任务的计划安排时间
	 * 
	 * @param taskUid
	 * @param planStart
	 * @param planFinish
	 * @param notes
	 */
	public void lockOperationTask(String taskUid, Date planStart, Date planFinish, String notes) throws Exception;

	public void forceFinishTaskBefore(String taskUid, String workerUid) throws Exception;

	public List<OperationTask> getOperationTasksBefore(String taskUid) throws Exception;

	public void startOperationTask(OperationTask operationTask) throws Exception;

	/**
	 * 设置工序工序开始
	 *
	 * @param taskUid
	 * @throws Exception
	 */
	public void startOperationTask(String taskUid) throws Exception;
	
	
	
	
	
	
	
	
	
	// public Integer updateOperationTaskCalcWorktime(OperationTask task)
	// throws Exception;
	//
	// public List<OperationTask> getOperationTask(String parentuid, int scope)
	// throws Exception;
	//
	// /**
	// * 通过工序号获取某一个零件任务的 工序对象
	// *
	// * @param partTask
	// * @param operationIdDesc
	// * @return
	// * @throws Exception
	// */
	// public OperationTask getOperationTask(PartTask partTask,
	// String operationIdDesc) throws Exception;
	//
	// /**
	// * 通过零件任务唯一号与工序号获取工序对象
	// *
	// * @param partTask
	// * @param operationIdDesc
	// * @return
	// * @throws Exception
	// */
	// public OperationTask getOperationTask(String partTaskUid,
	// String operationIdDesc) throws Exception;
	//
	// /**
	// * 获取某一个工序任务之后的所有工序任务，
	// *
	// * @param partTaskUid
	// * @param operationId
	// * 排序号
	// * @return
	// */
	// public List<OperationTask> getAfterTasks(String partTaskUid,
	// float beginOperationId) throws Exception;
	//
	// /**
	// * 通过工序号获取某一个零件任务的 工序对象
	// *
	// * @param partTask
	// * @param operationIdDesc
	// * @return
	// * @throws Exception
	// */
	// public OperationTask getOperationTask(PartTask partTask, Operation
	// operation)
	// throws Exception;
	//
	// public List<String> getAvailableResourceInOperationList(OperationTask
	// task)
	// throws Exception;
	//
	// public List<String> getAvailableResourceInHistoryList(OperationTask task)
	// throws Exception;
	//
	// /**
	// * 为某个零件任务添加一道工序任务
	// *
	// * @param partTask
	// * 零件任务
	// * @param predOperationTask
	// * 在这道工序任务之后插入
	// * @param operation
	// * 变更后的新工序数据
	// * @param sessionEmployeeUid
	// * 操作人员
	// * @throws Exception
	// */
	// public void addOperationTask(PartTask partTask,
	// OperationTask predOperationTask, Operation operation,
	// String sessionEmployeeUid) throws Exception;
	//
	// /**
	// * 为某个零件任务修改一道工序任务，按照基础工艺中定义的内容
	// *
	// * @param partTask
	// * 零件任务
	// * @param oldOperationTask
	// * 需要修改的工序任务
	// * @param newOperation
	// * 变更后的新工序数据
	// * @param sessionEmployeeUid
	// * 操作人员
	// * @throws Exception
	// */
	// public void updateOperationTask(PartTask partTask,
	// OperationTask oldOperationTask, Operation newOperation,
	// String sessionEmployeeUid) throws Exception;
	//
	// /**
	// * 改变加工顺序，工序跳跃
	// *
	// * @param partTask
	// * 零件任务
	// * @param operationTask
	// * 需要调整的工序任务
	// * @param refOperationTask
	// * 在此工序之后插入
	// * @param pos
	// * AFTER——在参照工序之后插入,BEFORE——在参照工序之前
	// * @param sessionEmployeeUid
	// * 操作人员
	// * @throws Exception
	// */
	// public void changeSeq(PartTask partTask, OperationTask operationTask,
	// OperationTask refOperationTask, String pos,
	// String sessionEmployeeUid) throws Exception;
	//
	// /**
	// * 通过完成数量
	// *
	// * @param partTask
	// * 零件任务
	// * @param oldOperationTask
	// * 需要修改的工序任务
	// * @param newOperation
	// * 变更后的新工序数据
	// * @param sessionEmployeeUid
	// * 操作人员
	// * @throws Exception
	// */
	// public void submitCompleteQty(OperationTask operationTask, float
	// completeQty)
	// throws Exception;
	//
	// /**
	// * 获取某一个零件任务的未完成工序任务，
	// *
	// * @param partTaskUid
	// * @param operationId
	// * 排序号
	// * @return
	// */
	// public List<OperationTask> getUnFinishTasks(String partTaskUid)
	// throws Exception;
	//
	// /**
	// * 将工序任务派工
	// *
	// * @param taskUid
	// * @throws Exception
	// */
	// public void dispatchOperatioinTask(String taskUid) throws Exception;
	//
	// /**
	// * 计算后序工序的的开始时间
	// *
	// * @param taskUid
	// * @return
	// * @throws Exception
	// */
	// public Date getSuccStart(String taskUid);
	//
	// /**
	// * 计算前道工序的完成时间
	// *
	// * @param taskUid
	// * @return
	// * @throws Exception
	// */
	// public Date getPredFinish(String taskUid);
	//

	// /**
	// * 锁定一个任务的计划安排时间
	// *
	// * @param taskUid
	// * @param planStart
	// * @param planFinish
	// * @param notes
	// */
	// public void lockOperationTask(OperationTask operationTask) throws
	// Exception;
	//
	// public void feedbackTaskWorkRec(WorkRecord workRecord) throws Exception;

	// public void forceFinishTask(String taskUid, String workerUid)
	// throws Exception;

	// public void submitOperationTask(OperationTask operationTask)
	// throws Exception;
	//
	// public void cancelOperationTask(OperationTask operationTask)
	// throws Exception;

	// /**
	// * 设置某一道工序任务完成并且已经交付入库
	// * @param taskUid
	// * @param employeeUid 工序交库的工人
	// * @throws Exception
	// */
	// public void deliveryOperationTask(String taskUid,String employeeUid)
	// throws Exception;
	//
	//
	// /**
	// * 设置某一道工序任务完成并且已经交付入库
	// * @param operationTask
	// * @param employeeUid 工序交库的工人
	// * @throws Exception
	// */
	// public void deliveryOperationTask(OperationTask operationTask,String
	// employeeUid) throws Exception;



	// /**
	// * 设置任务的实际开始时间
	// *
	// * @param taskUid
	// * @param actualStart
	// * @throws Exception
	// */
	// public void setTaskActualStart(String taskUid, Date actualStart)
	// throws Exception;
	//
	// /**
	// * by nk
	// */
	// public List<OperationTask> getSummaryCheckOperationTask(String taskType,
	// String deptId, String drawingId, String batchNum,
	// Integer operationDistance, String invDemandState);
	//
	// /**
	// * 添加一些临时补充的任务，任务可能在系统中连图号也没有
	// *
	// * @param drawingId
	// * @param partName
	// * @param batchNum
	// * @param operationIdDesc
	// * @param taskName
	// * @param priority
	// * @return
	// * @throws Exception
	// */
	// public OperationTask addTempTask(String drawingId, String partName,
	// String batchNum, String operationIdDesc, String taskName,Float planQty,
	// Integer priority) throws Exception;
	//
	// public void submitOperationTask(String taskUid);
	//
	// public void cancelOperationTask(String taskUid);
	
	 /**
	 * 更新任务报废数量
	 *
	 * @param taskUid
	 * @param rejectQty
	 * @throws Exception
	 */
	 void updateRejectQty(String taskUid, float rejectQty) throws Exception;
	 
	//
	// public List<OperationTask> getOperationTaskByPrepareState(String
	// taskType,
	// String serviceDeptId, String masterShop, String drawingId, String
	// batchNum,
	// Integer taskDistance, String prepareState);
	//
	// public OperationTask getPrevOperationTask(OperationTask operationTask);
	//
	// public OperationTask getNextOperationTask(OperationTask operationTask);
	//
	// /**
	// * 通过部门编号判断是否采集任务的开始时间
	// * @param deptUid
	// * @return
	// */
	// public boolean isNeedStartTask(String deptUid);
	//
	// /**
	// * 通过部门编号判断是否采集任务的开始时间
	// * @param deptUid
	// * @return
	// */
	// public boolean isNeedforceFinishTaskBefore(String deptUid);
	//
	// /**
	// * 强制完成工序任务
	// * 但不改变完成数量
	// */
	// public void forceFinishTaskNoCompleteQty(String taskUid, String
	// workerUid)
	// throws Exception;
	//
	//
	//
	// public enum FeedbackCondition {
	// TASK_NOT_DISPATCHED(-1,"本道工序未派工"),MATERIAL_NOT_RECEIVED (
	// -2,"本道工序未收料"),LASTOP_NOT_CHECKED(-3,"上道工序未检验"),PASSED(1,"通过");
	// private int typeId;
	// private String typeName;
	//
	//
	// private FeedbackCondition(int typeId,String typeName)
	// {
	// this.typeId=typeId;
	// this.typeName=typeName;
	// }
	//
	//
	// public int getTypeId()
	// {
	// return this.typeId;
	// }
	//
	// public String getTypeName()
	// {
	// return this.typeName;
	// }
	// }
	// /**
	// * 检查任务反馈的先决条件是否满足
	// * @param taskUid
	// * @throws Exception--
	// *
	// */
	// public FeedbackCondition checkFeedbackCondition(String taskUid) throws
	// Exception;
	//
	// /**
	// * 判断本道工序的上道工序是否已经完成检验
	// * @param operationTask
	// * @return
	// */
	// public boolean isLastOpChecked(OperationTask operationTask);
	//
	//

}
